//bind可以接受一个函数对象和多个参数，是一个通用函数适配器
//作用：在任务池中不用考虑处理函数和参数个数，降低代码的耦合

#include <iostream>
#include <string>
#include <vector>
#include <functional>

void print(const std::string &str,int num)
{
    std::cout<<str<<" "<<num<<std::endl; 
}

int main()
{
    //print("hello");
    //std::placeholders是我们的预留参数位，预留一个参数位
    //auto func=bind(print,"hello bind",std::placeholders::_1);
    //func(10); //调用函数时传入一个参数10
    
    //使用bind实现我们一个任务池
    //对一个函数包装器取别名，包装器可以包装任意对象
    using Task=std::function<void()>;
    std::vector<Task> arry; //这是我们的任务数组
    arry.push_back(std::bind(print,"hello",10)); //任务池中放入不同的任务
    arry.push_back(std::bind(print,"你好",20));
    arry.push_back(std::bind(print,"吃了吗",30));
    arry.push_back(std::bind(print,"吃了",40));

    for(auto &e:arry)
    {
        e(); //执行函数
    }
    
    return 0;
}